package com.zds.zds_picture_backend.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zds.zds_picture_backend.model.dto.space.analyze.*;
import com.zds.zds_picture_backend.model.entity.Space;
import com.zds.zds_picture_backend.model.entity.User;
import com.zds.zds_picture_backend.model.vo.space.analyze.*;

import java.util.List;

/**
 * @author 33882
 * @description 针对表【space(空间)】的数据库操作Service
 * @createDate 2025-10-12 20:49:43
 */
public interface SpaceAnalyzeService extends IService<Space> {


    /**
     * 获取空间类别分析数据
     *
     * @param spaceCategoryAnalyzeRequest 空间类别分析请求参数，包含分析所需的查询条件
     * @param loginuser                   当前登录用户信息，用于权限验证和数据过滤
     * @return 返回空间类别分析结果列表，每个元素包含对应类别的分析数据
     */
    List<SpaceCategoryAnalyzeResponse> getSpaceCategoryAnalyze(SpaceCategoryAnalyzeRequest spaceCategoryAnalyzeRequest, User loginuser);

    /**
     * 获取空间排名分析数据
     *
     * @param spaceRankAnalyzeRequest 空间排名分析请求参数，包含分析所需的各项条件
     * @param loginUser               当前登录用户信息，用于权限验证
     * @return 返回空间排名分析结果列表，每个元素包含一个空间的详细分析数据
     */
    List<Space> getSpaceRankAnalyze(SpaceRankAnalyzeRequest spaceRankAnalyzeRequest, User loginUser);

    /**
     * 检查空间分析权限的方法
     * @param spaceAnalyzeRequest 空间分析请求对象，包含分析所需的参数和配置信息
     * @param loginUser 当前登录用户对象，用于验证用户是否有权限进行空间分析操作
 */
    void checkSpaceAnalyzeAuth(SpaceAnalyzeRequest spaceAnalyzeRequest, User loginUser);

    /**
     * 获取空间使用情况分析结果的方法
     *
     * @param spaceUsageAnalyzeRequest 空间使用情况分析请求参数，包含分析所需的各项条件
     * @param loginuser 执行此操作的用户信息，用于权限验证
     * @return SpaceUsageAnalyzeResponse 返回空间使用情况的分析结果，包含各项使用数据的统计信息
 */
    SpaceUsageAnalyzeResponse getSpaceUsageAnalyze(SpaceUsageAnalyzeRequest spaceUsageAnalyzeRequest, User loginuser);

    /**
     * 获取空间标签分析结果的方法
     *
     * @param spaceTagAnalyzeRequest 空间标签分析请求对象，包含分析所需的参数
     * @param loginUser 当前登录用户信息，用于权限验证
     * @return 返回空间标签分析结果的响应列表，每个元素代表一个标签的分析数据
 */
    List<SpaceTagAnalyzeResponse> getSpaceTagAnalyze(SpaceTagAnalyzeRequest spaceTagAnalyzeRequest, User loginUser);

    /**
     * 获取空间大小分析结果
     *
     * @param spaceSizeAnalyzeRequest 空间大小分析请求参数，包含分析所需的各种条件信息
     * @param loginUser 当前登录用户信息，用于权限验证和数据隔离
     * @return 返回空间大小分析结果列表，每个元素包含对应空间的大小分析数据
 */
    List<SpaceSizeAnalyzeResponse> getSpaceSizeAnalyze(SpaceSizeAnalyzeRequest spaceSizeAnalyzeRequest, User loginUser);

    /**
     * 空间用户上传行为分析
     *
     * @param spaceUserAnalyzeRequest
     * @param loginuser
     * @return
     */
    List<SpaceUserAnalyzeResponse> getSpaceUserAnalyze(SpaceUserAnalyzeRequest spaceUserAnalyzeRequest, User loginuser);
}
